package com.guoxin.part4.chapter23;

/**
 * @author guoxin
 * @date 2019/9/1
 */
public abstract class Latch {
    protected int limit;

    // 用于控制多少个线程完成任务是才打开阀门
    public Latch(int limit) {
        this.limit = limit;
    }

    // 该方法会使得当前线程一直等待，直到所有的线程都完成工作，被阻塞的线程是允许被中断的
    public abstract void await() throws InterruptedException;

    // 当任务线程完成工作之后调用该方法是的计数器减一
    public abstract void countDown();

    // 获取当前还有多少个线程没有完成任务
    public abstract int getUnarrived();
}
